Original author(s) | David Heinemeier Hansson |
---|---|
Developer(s) | Rails Core Team |
Initial release | July 2004 |
Stable release | 3.1.3 / November 20, 2011 |
Preview release | 3.2.0.rc1 / December 20, 2011 |
Development status | Active |
Written in | Ruby |
Operating system | Cross-platform |
Type | Web application framework |
License | MIT License |
Website | http://rubyonrails.org |
Ruby on Rails, often shortened to Rails or RoR, is an open source full-stack web application framework for the Ruby programming language. Ruby on Rails is not to be confused with Ruby, which is a general purpose programming language that Ruby on Rails runs on. It should also be noted that Ruby itself existed for more than 10 years before the first release of Ruby on Rails. Ruby on Rails is a full-stack framework, meaning, it gives the web developer the full ability to gather information from the web server, talking/querying the database, and template rendering out of the box, also, as a result, Rails features a routing system that is independent of the web server.
Contents |
Version | Date |
---|---|
1.0[1] | December 13, 2005 |
1.2[2] | January 19, 2007 |
2.0[3] | December 7, 2007 |
2.1[4] | June 1, 2008 |
2.2[5] | November 21, 2008 |
2.3[6] | March 16, 2009 |
3.0[7] | August 29, 2010 |
3.1[8] | August 31, 2011 |
Ruby on Rails was extracted by David Heinemeier Hansson from his work on Basecamp, a project management tool by 37signals (now a web application company).[9] Hansson first released Ruby on Rails as open source in July 2004, but did not share commit rights to the project until February 2005.[10] In August 2006 the framework reached a milestone when Apple announced that it would ship Ruby on Rails with Mac OS X v10.5 "Leopard",[11] which was released in October 2007.
Ruby on Rails version 2.3 was released on March 15, 2009. Major new developments in Ruby on Rails include templates, engines, Rack and nested model forms. Templates enable the developer to generate a skeleton application with custom gems and configurations. Engines let one reuse application pieces complete with routes, view paths and models. The Rack web server interface and Metal allow one to write optimized pieces of code that route around ActionController.[12]
On December 23, 2008, Merb, another web application framework was launched, and Ruby on Rails announced a commitment to work together. The Ruby on Rails team announced they would work with the Merb project to bring "the best ideas of Merb" into Ruby on Rails 3, ending the "unnecessary duplication" across both communities.[13] Merb was merged with Rails as part of the Rails 3.0 release.[14][15]
Ruby on Rails 3.1 was released on August 31, 2011, reversible database migrations, and the asset pipeline were featured in this release.
Like many web frameworks, Ruby on Rails uses the Model-View-Controller (MVC) architecture pattern to organize application programming.
In a default configuration, a model in a Ruby on Rails framework maps to a table in a database. By convention, a model named User will map to the database table users, and the model will have a filename user.rb within app/models, while developers can choose to use whatever model name and database table name they wish, this is not a common practice and it's usually discouraged because Rails philosophy is to use convention over configuration.
A controller is the component of Rails that responds to external request from the web server to the application, and respond to the external request by determining which view file to render. The controller may also have to query the model directly for information and pass these onto the view. A controller may contain one or more actions. In Ruby on Rails, action is typically a basic unit which describing a single rule on how to respond to a specific external web-browser request. Also note that, if a controller/action is not mapped to the Rails router, the controller/action will be directly inaccessible to external web requests. By convention, Rails encourage developers to use a RESTful route which contain actions named create, new, edit, update, destroy, and index, as these are routed automatically by convention in the routes file if specified.
A view typically is a erb file in the default configuration of Rails. It is typically converted to output html at run-time, although in theory any formats can be used as a view.
Ruby on Rails includes tools that make common development tasks easier "out of the box", such as scaffolding that can automatically construct some of the models and views needed for a basic website.[16] Also included are WEBrick, a simple Ruby web server that is distributed with Ruby, and Rake, a build system, distributed as a gem. Together with Ruby on Rails these tools provide a basic development environment.
Ruby on Rails relies on a web server to run it. Mongrel was generally preferred over WEBrick at the time of writing, but it can also be run by Lighttpd, Abyss, Apache, nginx (either as a module - Passenger for example - or via CGI, FastCGI or mod_ruby), and many others. From 2008 onwards, the Passenger web server replaced Mongrel as the most used web server for Ruby on Rails.[17]
Ruby on Rails is also noteworthy for its extensive use of the JavaScript libraries Prototype and Script.aculo.us for Ajax.[18] Ruby on Rails initially utilized lightweight SOAP for web services; this was later replaced by RESTful web services. Ruby on Rails 3.0 uses a technique called Unobtrusive JavaScript to separate the functionality (or logic) from the structure of the web page. jQuery is fully supported as a replacement for Prototype and in Rails 3.1 is the default javascript library, reflecting an industry-wide move towards using jQuery.
Since version 2.0, Ruby on Rails by default offers both HTML and XML as output formats. The latter is the facility for RESTful web services.
The server uses embedded ruby in the HTML views with files having an html.erb extension. Other templating methods are available such as HAML which removes much of the normal page 'clutter' (for example html '<' and '>' and ruby indent 'end's)
Ruby on Rails 2.3 relies on Ruby 1.8.6. Ruby on Rails 3.0 has been designed to work with Ruby 1.8.7, Ruby 1.9.2, and JRuby 1.5.2+; earlier versions are not supported.[19]
Ruby on Rails is separated into various packages, namely ActiveRecord (an object-relational mapping system for database access), ActiveResource (provides web services), ActionPack, ActiveSupport and ActionMailer. Prior to version 2.0, Ruby on Rails also included the Action Web Service package that is now replaced by Active Resource. Apart from standard packages, developers can make plugins to extend existing packages.
Ruby on Rails is often installed using RubyGems, a package manager[20] which is included with current versions of Ruby. Many Linux distributions also support installation of Ruby on Rails and its dependencies through their native package management system.
Ruby on Rails is typically deployed with a database server such as MySQL or PostgreSQL, and a web server such as Apache running the Phusion Passenger module.
There are many Ruby on Rails hosting services such as Heroku, Engine Yard, and Rails Playground.
Ruby on Rails is intended to emphasize Convention over Configuration (CoC), and the rapid development principle of Don't Repeat Yourself (DRY).
"Convention over Configuration" means a developer only needs to specify unconventional aspects of the application. For example, if there is a class Sale in the model, the corresponding table in the database is called sales by default. It is only if one deviates from this convention, such as calling the table "products sold", that the developer needs to write code regarding these names. Generally, Ruby on Rails conventions lead to less code and less repetition.
"Don't repeat yourself" means that information is located in a single, unambiguous place. For example, using the ActiveRecord module of Rails, the developer does not need to specify database column names in class definitions. Instead, Ruby on Rails can retrieve this information from the database based on the class name.
In March 2007, David Heinemeier Hansson filed three Ruby on Rails related trademark applications to the USPTO. These applications regard the phrase "RUBY ON RAILS",[21] the word "RAILS",[22] and the official Rails logo.[23] As a consequence, in the summer of 2007, Hansson denied to Apress the permission to use the Ruby on Rails logo on the cover of a new Ruby on Rails book written by some authoritative community members. The episode gave rise to a polite protest in the Ruby on Rails community.[24][25] In response to this criticism, Hansson replied:
I only grant promotional use [of the Rails logo] for products I'm directly involved with. Such as books that I've been part of the development process for or conferences where I have a say in the execution. I would most definitely seek to enforce all the trademarks of Rails.[24]
Rails running on Matz's Ruby Interpreter (the de facto reference interpreter for Ruby) had been criticized for issues with scalability.[26] These critics often mentioned various Twitter outages in 2007 and 2008, which spurred Twitter's partial transition to Scala (which runs on the Java Virtual Machine) for their queueing system and other middleware.[27][28] The user interface aspects of the site continue to run Ruby on Rails.[29]
|
|